1 package org.smartcomps.twister.engine.messaging; 2 3 import junit.framework.TestCase; 4 import org.smartcomps.twister.engine.core.definition.TestReceive; 5 import org.smartcomps.twister.engine.core.definition.TestProcess; 6 import org.smartcomps.twister.engine.priv.core.dynamic.ProcessInstance; 7 import org.smartcomps.twister.engine.priv.core.dynamic.ExecutionContext; 8 import org.smartcomps.twister.engine.priv.core.dynamic.ProcessInstanceFactory; 9 import org.smartcomps.twister.engine.priv.core.definition.*; 10 import org.smartcomps.twister.engine.TwisterEngineFactory; 11 import org.smartcomps.twister.common.transaction.TransactionManager; 12 import org.smartcomps.twister.common.lifecycle.LifecycleManager; 13 import org.dom4j.Document; 14 import org.dom4j.DocumentHelper; 15 import org.dom4j.Element; 16 import net.sf.hibernate.tool.hbm2ddl.SchemaExport; 17 import net.sf.hibernate.cfg.Configuration; 18 19 import java.util.Map; 20 import java.util.HashMap; 21 import java.util.HashSet; 22 import java.util.Calendar; 23 24 import com.sun.msv.datatype.xsd.DatatypeFactory; 25 26 /*** 27 * Testing the MessageController implementation and how it routes messages to 28 * waiting activities. 29 */ 30 public class TestMessageController extends TestCase { 31 32 private TestReceive testReceive = new TestReceive(); 33 private TestProcess testProcess = new TestProcess(); 34 35 private TwisterProcess process; 36 private Pick pick; 37 private Invoke invoke1; 38 private Invoke invoke2; 39 private Invoke invoke3; 40 41 protected void setUp() throws Exception { 42 LifecycleManager.getLifecycleManager().createResources(); 43 LifecycleManager.getLifecycleManager().startResources(); 44 45 SchemaExport schemaExport = new SchemaExport(new Configuration().configure()); 46 schemaExport.create(true, true); 47 48 TransactionManager.beginTransaction(); 49 } 50 51 protected void tearDown() throws Exception { 52 TransactionManager.commitTransaction(); 53 54 LifecycleManager.getLifecycleManager().stopResources(); 55 LifecycleManager.getLifecycleManager().destroyResources(); 56 } 57 58 public void testAcknowledgeReceive() throws Exception { 59 testProcess.testCreateWithCorrelation(); 60 testReceive.testCreateWithValues(); 61 TransactionManager.commitTransaction(); 62 TransactionManager.beginTransaction(); 63 64 // Executing, we're testing the reception on an already waiting receive ec 65 Map corrProp = new HashMap(); 66 corrProp.put(TestProcess.CORRELATION_PROP1, "2578"); 67 corrProp.put(TestProcess.CORRELATION_PROP2, "12"); 68 69 TestReceive.receive.execute(TestProcess.CORRELATION_NAME, corrProp); 70 71 TransactionManager.commitTransaction(); 72 73 Document doc = DocumentHelper.createDocument(); 74 Element root = doc.addElement("message").addElement("main").addElement("root"); 75 root.addElement("orderid").setText("2578"); 76 root.addElement("customerid").setText("12"); 77 TwisterEngineFactory.getEngine().acknowledge(TestReceive.REC_PARTNER 78 , TestReceive.REC_PORT, TestReceive.REC_OPERATION, doc); 79 80 Thread.sleep(5000); 81 TransactionManager.beginTransaction(); 82 83 ProcessInstance executedInstance = ProcessInstanceFactory.findInstanceByCorrelation(TestProcess.CORRELATION_NAME, corrProp); 84 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus()); 85 assertEquals("Receive is not completed after execution ended", ExecutionContext.COMPLETED, executedInstance.getChildExecutionContext().getStatus()); 86 87 } 88 89 public void testAcknowledgeExistingPick() throws Exception { 90 createPick(false); 91 92 Map corrProp = new HashMap(); 93 corrProp.put("corrProp21", "ZZ45E1"); 94 corrProp.put("corrProp22", "ZA21T"); 95 pick.execute("correlation2", corrProp); 96 TransactionManager.commitTransaction(); 97 98 TransactionManager.beginTransaction(); 99 ProcessInstance executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp); 100 assertEquals("Process is not active after juste executed", ProcessInstance.ACTIVE, executedInstance.getStatus()); 101 TransactionManager.commitTransaction(); 102 103 Document message = DocumentHelper.createDocument(); 104 Element mainPart = message.addElement("message").addElement("main"); 105 mainPart.addElement("shipid").setText("ZZ45E1"); 106 mainPart.addElement("shipperid").setText("ZA21T"); 107 mainPart.addElement("truckid").setText("VW245"); 108 TwisterEngineFactory.getEngine().acknowledge("link2", "port2", "op2", message); 109 110 Thread.sleep(5000); 111 TransactionManager.beginTransaction(); 112 // By selecting the instance this way, we make sure that executing the Pick 113 // resulted in the right correlation creation. 114 executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp); 115 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus()); 116 117 corrProp = new HashMap(); 118 corrProp.put("corrProp3", "VW245"); 119 executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp); 120 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus()); 121 } 122 123 public void testAcknowledgePickCreateInstance() throws Exception { 124 createPick(true); 125 TransactionManager.commitTransaction(); 126 127 Document message = DocumentHelper.createDocument(); 128 Element mainPart = message.addElement("message").addElement("main"); 129 mainPart.addElement("shipid").setText("ZZ45E1"); 130 mainPart.addElement("shipperid").setText("ZA21T"); 131 mainPart.addElement("truckid").setText("VW245"); 132 TwisterEngineFactory.getEngine().acknowledge("link2", "port2", "op2", message); 133 134 Thread.sleep(5000); 135 TransactionManager.beginTransaction(); 136 137 Map corrProp = new HashMap(); 138 corrProp.put("corrProp21", "ZZ45E1"); 139 corrProp.put("corrProp22", "ZA21T"); 140 // By selecting the instance this way, we make sure that executing the Pick 141 // resulted in the right correlation creation. 142 ProcessInstance executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp); 143 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus()); 144 145 corrProp = new HashMap(); 146 corrProp.put("corrProp3", "VW245"); 147 executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp); 148 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus()); 149 } 150 151 private void createPick(boolean createInstance) throws Exception { 152 process = ProcessFactory.createProcess("TestProcess"); 153 ProcessFactory.addProperty(process, "corrProp11", "xs:string", "tns:msg1", "main", "/orderid"); 154 ProcessFactory.addProperty(process, "corrProp12", "xs:string", "tns:msg2", "main", "/customerid"); 155 ProcessFactory.addProperty(process, "corrProp21", "xs:string", "tns:msg1", "main", "/shipid"); 156 ProcessFactory.addProperty(process, "corrProp22", "xs:string", "tns:msg2", "main", "/shipperid"); 157 ProcessFactory.addProperty(process, "corrProp3", "xs:string", "tns:msg3", "main", "/truckid"); 158 ProcessFactory.addCorrelation(process, "correlation1", "corrProp11 corrProp12"); 159 ProcessFactory.addCorrelation(process, "correlation2", "corrProp21 corrProp22"); 160 ProcessFactory.addCorrelation(process, "correlation3", "corrProp3"); 161 162 pick = (Pick) ActivityFactory.createActivity(Pick.class, process); 163 pick.setCreateInstance(createInstance); 164 invoke1 = (Invoke) ActivityFactory.createActivity(Invoke.class, pick); 165 invoke1.setName("invoke1"); 166 invoke1.setPartner("partner1"); 167 invoke1.setOperation("operation1"); 168 invoke1.setPortType("porttype1"); 169 invoke2 = (Invoke) ActivityFactory.createActivity(Invoke.class, pick); 170 invoke1.setName("invoke2"); 171 invoke2.setPartner("partner2"); 172 invoke2.setOperation("operation2"); 173 invoke2.setPortType("porttype2"); 174 invoke3 = (Invoke) ActivityFactory.createActivity(Invoke.class, pick); 175 invoke1.setName("invoke3"); 176 invoke3.setPartner("partner3"); 177 invoke3.setOperation("operation3"); 178 invoke3.setPortType("porttype3"); 179 180 CorrelationRef cref1 = ActivityFactory.createCorrelationRef("correlation1", true, CorrelationRef.IN); 181 HashSet cref1List = new HashSet(); 182 cref1List.add(cref1); 183 ActivityFactory.addMessageEvent(pick, invoke1, "link1", "port1", "op1", "var1", cref1List); 184 // We're working with the second correlation in this test and if we want to 185 // have createInstance, correlation must be initiated too 186 CorrelationRef cref2 = ActivityFactory.createCorrelationRef("correlation2", createInstance, CorrelationRef.IN); 187 CorrelationRef cref3 = ActivityFactory.createCorrelationRef("correlation3", true, CorrelationRef.IN); 188 HashSet cref2List = new HashSet(); 189 cref2List.add(cref2); 190 cref2List.add(cref3); 191 ActivityFactory.addMessageEvent(pick, invoke2, "link2", "port2", "op2", "var2", cref2List); 192 ActivityFactory.addAlarmEvent(pick, invoke3, createDate30SecsLater(), AlarmEvent.DEADLINE_EXPR); 193 } 194 195 private String createDate30SecsLater() throws Exception { 196 Calendar nowPlus30 = Calendar.getInstance(); 197 nowPlus30.add(Calendar.SECOND, 30); 198 String nowPlus30Str = DatatypeFactory.getTypeByName("dateTime").serializeJavaObject(nowPlus30, null); 199 System.out.println("=> " + nowPlus30Str); 200 return nowPlus30Str; 201 } 202 203 }

This page was automatically generated by Maven